package liu.zhi.peng;

import javax.imageio.plugins.tiff.TIFFImageReadParam;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

public class GameJFrame extends JFrame implements ActionListener {
    int flagout = 0;
    //加载字符数组的下标
    int i=-1;
    //如果点了3次名之后就不能再点名了
    int j=0;
    Font font=null;
    boolean flagShake = true;
    //判断是否点击了点名按钮
    boolean flagNew = false;
    String [] arr  = new String [100];
    int sumDinner ;
    JButton button1 = new JButton(new ImageIcon("src\\运行.png"));
    JButton button2 = new JButton(new ImageIcon("src\\退出.png"));
    JButton button3 = new JButton(new ImageIcon("src\\重来.png"));
    public GameJFrame(String [] array,int size){
        //将学生集合中的人名赋值给数组
        arr = array;
        sumDinner = size;
        myCreatFont();
        initJFrame();
        //给三个按钮添加事件监听
        //不在initimage中添加是因为后面会重复调用initimage方法，就会导致重复添加时间监听
        button1.addActionListener(this);
        button2.addActionListener(this);
        button3.addActionListener(this);
        //显示JFrame窗口
        this.setVisible(true);
        //3次点名的函数
        time3();
    }
    //3次点名
    private void time3() {
        for(j=0;j<3;j++)
        {
            //更新页面内容
            //当运行按钮点击之后就会从repaint中退出来
            repaint();
            //如果点击了退出按钮就接着再次跳出循环
            if(flagout ==1){
                break;
            }
            //等待重来按钮被点击
            //重来按钮不被点击就会一直在下面的while循环中
            while(!flagNew){
                try {
                    //在等待重来按钮被点击的时候如果按下了退出按钮就不再等待重来按钮被点击，直接退出循环
                    if(flagout==1)
                        break;
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
            //在等待重来按钮被点击了之后从while循环跳出来之后，继续从for循环中跳出来
            if(flagout==1){
                break;
            }
        }
    }
    public void repaint() {
        while (flagShake){
            //如果点击退出按钮就直接跳出循环
            if(flagout == 1){
                break;
            }
            //刷新页面
            initImage();
            try {
                //名字更换的速度是100毫秒
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public void initJFrame(){
        //JFrame标题
        this.setTitle("随机点名");
        //JFrame尺寸
        this.setSize(1200,700);
        //JFrame是否置顶
        this.setAlwaysOnTop(true);
        //将JFrame居中放置
        this.setLocationRelativeTo(null);
        //设置默认关闭方式//只关闭窗口
        this.setDefaultCloseOperation(2);
        //取消JFrame中的默认内容居中放置
        this.setLayout(null);
    }
    public void initImage(){
        //清空内容
        this.getContentPane().removeAll();
        if(flagShake)
            i++;
        //学生
        JLabel jLabel = new JLabel(arr[i%sumDinner],SwingConstants.CENTER);//居中
        //设置字体
        jLabel.setFont(font.deriveFont(80f));
        jLabel.setBounds(320,150,500,150);
        this.getContentPane().add(jLabel);

        button1.setBounds(170,380,200,200);
        //去除按钮默认边框
        button1.setBorderPainted(false);
        //去除按钮背景
        button1.setContentAreaFilled(false);
        button2.setBounds(750,380,200,200);
        button2.setBorderPainted(false);
        button2.setContentAreaFilled(false);
        button3.setBounds(170,380,200,200);
        //去除按钮默认边框
        button3.setBorderPainted(false);
        //去除按钮背景
        button3.setContentAreaFilled(false);
        if(flagShake)
            this.getContentPane().add(button1);
        else
            this.getContentPane().add(button3);
        this.getContentPane().add(button2);
        this.getContentPane().repaint();
//        this.setVisible(true);
    }

    private void myCreatFont() {
        File file = new File("lib\\字体1\\像素字体.otf");
        try {
            //添加新字体
            font = Font.createFont(Font.TRUETYPE_FONT,file);
            //获取本地的图形化环境
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            //在本地注册一个新字体
            ge.registerFont(font);
        } catch (FontFormatException e) {
            System.out.println("字体加载失败");
            e.printStackTrace();
            throw new RuntimeException(e);
        } catch (IOException e) {
            System.out.println("字体文件不存在");
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    //重写事件发生之后的行为
    @Override
    public void actionPerformed(ActionEvent e) {
        Object obj = e.getSource();
        if(obj==button1){
            //不再更新名字
            flagShake=false;
            //等待重来按钮被点击
            flagNew = false;
            initImage();
        }
        else if(obj==button2){
           this.setVisible(false);
           flagout=1;
        }
        else if(obj==button3){
            //重新再次进入repaint方法中
            flagShake=true;
            flagNew = true;
        }
    }
}